package com.douxg.fastCoding.spring.exception;

import com.douxg.fastCoding.spring.vo.Result;
import com.douxg.fastCoding.spring.consts.BizCode;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Description 全局异常
 * springboot全局异常有两种
 * 1、参考GlobalExceptionHandler类，通过注解RestControllerAdvice和ExceptionHandler实现
 * 2、参考此类，通过实现ErrorController
 * 适用范围：方式1只能捕获进入controller后出现的异常，而方式2能够捕获接收到请求的所有异常
 * 两种可一起使用，此时，进入controller后的异常方式1处理，其它的方式的2处理
 * 建议两种一起使用，控制更加细化
 * @Auther douxg
 * @Date 2020/4/16 14:58
 */
@RestController
@RequestMapping("/")
public class WebErrorController implements ErrorController {
    private final static String ERROR_PATH = "/error";

    @RequestMapping(ERROR_PATH)
    public Result error(HttpServletRequest request, HttpServletResponse response) {
        int status = response.getStatus();
        BizCode bizCode = BizCode.getByCode(status);
        if (bizCode == null) {
            return Result.error();
        }
        return Result.bizCode(bizCode);
    }

    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }
}
